GDP & emissions - degrowthing or decoupling?
Friday fagpackets
One of a series…
What’s all this about de-growth?
<sigh>
Data
Downloaded from the awesome OurWorldInData.
Code
dt_abs <- data.table::fread(here::here("data", "co2-emissions-and-gdp.csv"))
dt_pc <- data.table::fread(here::here("data", "co2-emissions-and-gdp-per-capita.csv"))Who do we care about?
Code
entities_of_interest <- c("United Kingdom", "United States", "New Zealand", "China")Absolute GDP & emissions
First we’ll try production emissions.
Code
plotDT <- dt_abs[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(y = as.numeric(`GDP, PPP (constant 2017 international $)`)/1000000000,
x = as.numeric(`Annual CO2 emissions`)/1000000,
colour = Entity,
alpha = Year)) +
geom_point() +
labs(x = "Annual CO2 emissions (production-based, gT)",
y = "GDP $bn (constant 2017 $)")Next we’ll try consumption emissions.
Note that 2020 consumption-based emissions data is missing so you don’t see the downtick
Code
plotDT <- dt_abs[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(y = as.numeric(`GDP, PPP (constant 2017 international $)`)/1000000000,
x = as.numeric(`Annual consumption-based CO2 emissions`)/1000000,
colour = Entity,
alpha = Year)) +
geom_point() +
labs(x = "Annual CO2 emissions (consumption-based, gT)",
y = "GDP $bn (constant 2017 $)")Per capita GDP & emissions
Since we’ll be dividing everything pairwise by the same denominator, nothing much should change… but the plots should be much clearer as we’ve removed the affect of population size
First we’ll try production emissions.
Code
plotDT <- dt_pc[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(y = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
x = as.numeric(`Annual CO2 emissions (per capita)`),
colour = Entity,
alpha = Year)) +
geom_point() +
theme(legend.position = "none") +
labs(x = "Annual CO2 emissions per capita (production-based, T)",
y = "GDP per capita (constant 2017 $)")Let’s repeat that for all countries. Hover over the dots to see which is which #YMMV
Code
#plotDT <- dt_pc[Entity %in% entities_of_interest]
plotDT <- dt_pc # for fun
p <- ggplot2::ggplot(plotDT, aes(y = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
x = as.numeric(`Annual CO2 emissions (per capita)`),
colour = Entity,
alpha = Year)) +
geom_point() +
theme(legend.position = "none") +
labs(x = "Annual CO2 emissions per capita (production-based, T)",
y = "GDP per capita (constant 2017 $)")
plotly::ggplotly(p)Next we’ll try consumption emissions.
Note that 2020 consumption-based emissions data is missing so you don’t see the down-tick
Code
plotDT <- dt_pc[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(y = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
x = as.numeric(`Annual consumption-based CO2 emissions (per capita)`),
colour = Entity,
alpha = Year)) +
geom_point() +
labs(x = "Annual CO2 emissions per capita (consumption-based, T)",
y = "GDP per capita (constant 2017 $)")Let’s repeat that for all countries. Hover over the dots to see which is which #YMMV
Code
#plotDT <- dt_pc[Entity %in% entities_of_interest]
plotDT <- dt_pc # for fun
p <- ggplot2::ggplot(plotDT, aes(y = as.numeric(`GDP per capita, PPP (constant 2017 international $)`),
x = as.numeric(`Annual consumption-based CO2 emissions (per capita)`),
colour = Entity,
alpha = Year)) +
geom_point() +
labs(x = "Annual CO2 emissions per capita (consumption-based, T)",
y = "GDP per capita (constant 2017 $)")
plotly::ggplotly(p)Efficiency
How about looking at efficency gC02e per $ GDP?
Following https://timjackson.org.uk/earth-vs-growth/ …
Code
dt_abs[, `Emissions intensity` := `Annual CO2 emissions`/`GDP, PPP (constant 2017 international $)`*1000*1000]
entities_of_interest <- c("United Kingdom", "United States", "World", "New Zealand", "China")Code
plotDT <- dt_abs[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(Year, `Emissions intensity`, colour = Entity)) +
geom_line() +
labs(y = "gC02 per $ GDP",
colour = "Country",
caption = "Data: https://ourworldindata.org")For the UK, let’s say c. 300g/$ in 1995 reducing to 200g/$ in 2010. So 15 years. To go from 200g/$ to zero at the same rate would take approx. 30 years. So net-zero by 2050?
Regardless of whether that aligns with science-based targets (i.e. absolute zero by 2044) … what happens if the economy grows … by say 2-3% per year? … would that force total emissions up (fixed intensity) or result in efficiency gains (lower intensity)?
Code
dt_abs[, `Emissions intensity (consumption-based)` := `Annual consumption-based CO2 emissions`/`GDP, PPP (constant 2017 international $)`*1000*1000]Code
plotDT <- dt_abs[Entity %in% entities_of_interest]
ggplot2::ggplot(plotDT, aes(Year, `Emissions intensity (consumption-based)`, colour = Entity)) +
geom_line() +
labs(y = "gC02 per $ GDP")Warning: Removed 4 row(s) containing missing values (geom_path).
Whom do we love?
Data descriptions
Check
Skim the absolute data:
Code
skimr::skim(dt_abs)Warning: Couldn't find skimmers for class: integer64; No user-defined `sfl`
provided. Falling back to `character`.
Warning: Couldn't find skimmers for class: integer64; No user-defined `sfl`
provided. Falling back to `character`.
| Name | dt_abs |
| Number of rows | 7795 |
| Number of columns | 8 |
| Key | NULL |
| _______________________ | |
| Column type frequency: | |
| character | 4 |
| numeric | 4 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Entity | 0 | 1.00 | 4 | 32 | 0 | 255 | 0 |
| Code | 0 | 1.00 | 0 | 8 | 931 | 225 | 0 |
| Annual CO2 emissions | 479 | 0.94 | 1 | 21 | 0 | 6137 | 0 |
| GDP, PPP (constant 2017 international $) | 1626 | 0.79 | 1 | 21 | 0 | 6162 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| Year | 0 | 1.00 | 2005.06 | 8.930000e+00 | 1990.00 | 1997.00 | 2005.00 | 2013.00 | 2.02000e+03 | ▇▇▇▇▇ |
| Annual consumption-based CO2 emissions | 3730 | 0.52 | 976326173.39 | 3.366486e+09 | 197201.67 | 10759532.52 | 59975058.69 | 290854945.27 | 3.67025e+10 | ▇▁▁▁▁ |
| Emissions intensity | 2105 | 0.73 | 263.56 | 2.409400e+02 | 9.15 | 122.67 | 196.73 | 309.26 | 2.30112e+03 | ▇▁▁▁▁ |
| Emissions intensity (consumption-based) | 4295 | 0.45 | 291.92 | 1.686800e+02 | 4.19 | 179.06 | 251.82 | 365.36 | 1.82195e+03 | ▇▂▁▁▁ |
Skim the per capita data
Code
skimr::skim(dt_pc)| Name | dt_pc |
| Number of rows | 7745 |
| Number of columns | 6 |
| Key | NULL |
| _______________________ | |
| Column type frequency: | |
| character | 2 |
| numeric | 4 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Entity | 0 | 1 | 4 | 32 | 0 | 252 | 0 |
| Code | 0 | 1 | 0 | 8 | 899 | 224 | 0 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| Year | 0 | 1.00 | 2005.07 | 8.93 | 1990.00 | 1997.00 | 2005.00 | 2013.00 | 2020.00 | ▇▇▇▇▇ |
| GDP per capita, PPP (constant 2017 international $) | 1579 | 0.80 | 17879.29 | 20132.68 | 436.72 | 3678.83 | 10365.78 | 25832.03 | 161971.47 | ▇▂▁▁▁ |
| Annual consumption-based CO2 emissions (per capita) | 3680 | 0.52 | 6.53 | 6.92 | 0.05 | 1.19 | 4.30 | 9.89 | 57.79 | ▇▂▁▁▁ |
| Annual CO2 emissions (per capita) | 492 | 0.94 | 5.11 | 6.44 | 0.02 | 0.77 | 2.97 | 7.42 | 68.72 | ▇▁▁▁▁ |
Code
# hidden chunk